package Gather.MapExercise.HashMapDome;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.function.BiConsumer;

/**
 * ClassName:HashMapText002
 * Package:Gather.MapExercise
 * Description:
 *
 * @Author:ZhangXin
 * @Create2023/2/20-19:23
 * @Version:v1.0
 */
public class HashMapText002 {
    /*需求
     * 创建一个HashMap集合,键是学生对象(Student),值是籍贯(String)
     * 存储三个键值对元素,并遍历
     * 要求：同姓名,同年龄认为是同一个学生*/

    /*核心点
    * HashMap的键位置如果存储的是自定义对象,需要重写hashCode和equals方法*/
    public static void main(String[] args) {
        //创建HashMap的对象
        HashMap<Student002, String> hm = new HashMap<>();
        //创建三个学生对象
        Student002 s1 = new Student002("zhangsan", 23);
        Student002 s2 = new Student002("lisi", 24);
        Student002 s3 = new Student002("wangwu", 25);
        Student002 s4 = new Student002("wangwu", 25);
        //添加元素
        hm.put(s1, "江苏");
        hm.put(s2, "浙江");
        hm.put(s3, "福建");
        hm.put(s4, "山东");
        //遍历集合
        Set<Student002> keys = hm.keySet();
        for (Student002 key : keys) {
            String value = hm.get(key);
            System.out.println(key + "->" + value);
        }
        System.out.println("-------------------------------------------");
        Set<Map.Entry<Student002, String>> entries = hm.entrySet();
        for (Map.Entry<Student002, String> entry : entries) {
            Student002 key = entry.getKey();
            String value = entry.getValue();
            System.out.println(key +"="+value);
        }
        System.out.println("-------------------------------------------");
        hm.forEach(new BiConsumer<Student002, String>() {
            @Override
            public void accept(Student002 student002, String s) {
                System.out.println(student002 +"="+s);
            }
        });

        System.out.println("-------------------------------------------");
        hm.forEach((student002, s) -> System.out.println(student002 +"="+s));
    }
}
/*
* 类名和名字一样的是构造方法
* 向上的箭头：表示重写的父类方法或者接口的名称
* 向右的箭头：表示这个方法来自于某个类或者某个接口中(继承)
* 黄色的f小圆圈：属性(成员变量/常量)
* 绿色的I：表示接口
* 蓝色的c：内部类
* */

//1<<4 左移,左移一次乘2
